package cn.smile.business.notebook;

import cn.smile.bean.dto.notebook.NotebookDTO;
import cn.smile.bean.entity.notebook.Notebook;
import cn.smile.bean.form.notebook.AddNotebookForm;
import cn.smile.bean.form.notebook.QueryNotebookForm;
import cn.smile.bean.form.notebook.UpdateNotebookForm;
import cn.smile.commons.domain.IBaseService;
import com.baomidou.mybatisplus.core.metadata.IPage;

import java.util.List;

public interface INotebookService extends IBaseService<Notebook> {

    /**
     * 新增日记记录
     *
     * @param form 日记参数
     * @return 新增结果
     */
    Boolean addNotebook(AddNotebookForm form);

    /**
     * 更新日记记录
     *
     * @param form 更新参数
     * @return 更新结果
     */
    Boolean updateNotebook(UpdateNotebookForm form);

    /**
     * 分页查询日记列表
     *
     * @param form 查询参数
     * @return 查询结果
     */
    IPage<NotebookDTO> getPage(QueryNotebookForm form);

    /**
     * 列表查询日记列表
     *
     * @param form 查询参数
     * @return 查询结果
     */
    List<NotebookDTO> getList(QueryNotebookForm form);

    /**
     * ID查询日记详情
     *
     * @param id 日记记录ID
     * @return 查询结果
     */
    NotebookDTO getEntityById(String id);

    /**
     * 删除日记记录
     *
     * @param id 日记ID
     * @return 删除结果
     */
    Boolean delEntity(String id);

    /**
     * 统计指定用户记录天数
     *
     * @param userId 用户ID
     * @return 统计结果
     */
    Integer countRecordDay(String userId);

    /**
     * 统计指定用户日记数量
     *
     * @param userId 用户ID
     * @return 数量
     */
    Integer countNotebookNum(String userId);

    /**
     * 统计分享给指定用户的日记数量
     *
     * @param userId 日记ID
     * @return 日记数量
     */
    Integer shareNumToUser(String userId);
}
